package com.rich;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

/**
 * JUint测试基类.<br>
 * 使用方法: <br>
 * 1) 需要覆盖 {@link #getConfigLocations()}方法,方法内返回spring配置文件路径数组.如果不覆盖此方法,将自动引入所有的spring 配置文件,这样会延长加载时间. <br>
 * 2) 将需要自动装配的属性变量声明为protected,并提供一个set方法.<br>
 * 3) 如果需要设置数据库操作完成时,不做回滚,则需要在测试类的构造函数中增加语句setDefaultRollback(false);<br>
 * <p>
 * 只需要设置了以上前两个步骤,就可以在测试类中使用spring中配置的bean对象.<br>
 * 此类中设置的默认行为:<br>
 * 1) 数据库操作完成,默认回滚.<br>
 * 2) spring初始化按名称匹配注入对象.
 */
public abstract class AbstractBaseTestCase extends
		AbstractTransactionalDataSourceSpringContextTests {

	protected final Log log = LogFactory.getLog(getClass());

	public AbstractBaseTestCase() {
	}

	public AbstractBaseTestCase(String name) {
		super(name);
		// 启用直接对属性变量进行注释的机制
		setPopulateProtectedVariables(true);
		// 按名称匹配注入
		setAutowireMode(AUTOWIRE_BY_NAME);
		// 设置数据库操作默认回滚
		setDefaultRollback(true);

	}

	/**
	 * 默认初始化所有spring配置文件. 一般子类应该覆盖此方法,不要初始化所有的配置文件,这样会很耗时间.
	 * @return String[]
	 */
	protected String[] getConfigLocations() {
		log.info("初始化所有spring配置文件..........");
		return new String[] { "classpath:/spring-config/applicationContext*.xml", };
	}

	protected int queryCountOfSQL(String sql) {
		int size_af = getJdbcTemplate().queryForInt(sql);
		return size_af;
	}
}
